package com.weilele.mvvm.base.helper.annotation;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自动生成holder，只支持以下两种类型
 * viewType 与 holderClass 要一一对应
 * 优先级
 * 1.有viewType和holderClass的值优先使用，为了支持多个类型的item
 * 此时，adapter应该调用 setOnGetItemViewTypeListener { self, position ->
 * //返回注解[viewType]中存在的viewType,否则会报错
 * }
 * 2.使用变量的类型值
 * 如果只支持单个item，不建议给viewType和holderClass赋值
 * <p>
 * 反射成功的条件，
 * holder需要以下重写构造方法
 * *** constructor(binding: HolderHomeBinding) : super(binding)**
 * c传入binding类型
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MvvmVLayoutAdapter {
    /**
     * 如果这里赋值，那么adapter请务必调用
     * homeAdapter.setOnGetItemViewTypeListener { self, position ->
     * if (position % 2 == 0) {
     * 1
     * } else {
     * 3
     * }
     * 1
     * }
     */
    int[] viewType() default {};

    Class<?>[] holderClass() default {};
}
